﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace MyChart
{
    /// <summary>
    /// 表示 TargetLine 对象的集合
    /// </summary>
    public abstract class TargetLineCollection : ICollection<TargetLine>, IXmlGeneratable
    {
        #region 字段

        private List<TargetLine> _targetLines = new List<TargetLine>();

        #endregion

        #region 属性

        /// <summary>
        /// 集合索引器
        /// </summary>
        /// <param name="index">以0为起始数的集合索引</param>
        /// <returns>TargetLine 对象</returns>
        public TargetLine this[int index]
        {
            set
            {
                _targetLines[index] = value;
            }
            get
            {
                return _targetLines[index];
            }
        }

        /// <summary>
        /// 获取内部 TargetLine 集合
        /// </summary>
        protected List<TargetLine> TargetLines
        {
            get { return _targetLines; }
        }

        /// <summary>
        /// 获取集合中 TargetLine 对象的总数
        /// </summary>
        public int Count
        {
            get
            {
                return _targetLines.Count;
            }
        }

        #endregion

        #region 抽象方法
        
        /// <summary>
        /// 要求子类实现获取当前集合对应的 FusionChart Xml配置字符串方法
        /// </summary>
        /// <returns>Xml配置字符串</returns>
        public abstract string GetXmlString();

        #endregion

        #region 方法

        /// <summary>
        /// 添加一个 TargetLine 对象到集合中
        /// </summary>
        /// <param name="item">要添加的 TargetLine 对象</param>
        public void Add(TargetLine item)
        {
            _targetLines.Add(item);
        }

        /// <summary>
        /// 移除集合中指定索引的 TargetLine 对象
        /// </summary>
        /// <param name="index">以0为起始数的集合索引</param>
        public void RemoveAt(int index)
        {
            _targetLines.RemoveAt(index);
        }

        #endregion

        #region ICollection<TargetLine> 成员

        /// <summary>
        /// 清空集合
        /// </summary>
        public void Clear()
        {
            _targetLines.Clear();
        }

        /// <summary>
        /// 获取一个值，该值表明集合是否包含指定的 TargetLine 对象。
        /// </summary>
        /// <param name="item">要搜索的 TargetLine 对象</param>
        /// <returns>如果集合包含指定的 TargetLine 对象，则为 true；否则为 false</returns>
        public bool Contains(TargetLine item)
        {
            return _targetLines.Contains(item);
        }

        /// <summary>
        /// 将集合中的 TargetLine 对象复制到指定的 System.Array 中，从指定的索引开始
        /// </summary>
        /// <param name="array">从零开始的 System.Array，它接收从集合复制来的 TargetLine 对象</param>
        /// <param name="arrayIndex">指定 System.Array 中接收 TargetLine 对象的第一个索引</param>
        public void CopyTo(TargetLine[] array, int arrayIndex)
        {
            _targetLines.CopyTo(array, arrayIndex);
        }

        /// <summary>
        /// 获取一个值，该值指示集合是否为只读
        /// </summary>
        public bool IsReadOnly
        {
            get { return false; }
        }

        /// <summary>
        /// 从集合中移除 TargetLine 对象
        /// </summary>
        /// <param name="item">需要移除的 TargetLine 对象</param>
        /// <returns>如果成功移除，则为 true；否则为 false</returns>
        public bool Remove(TargetLine item)
        {
            return _targetLines.Remove(item);
        }

        #endregion

        #region IEnumerable<TargetLine> 成员
        
        /// <summary>
        /// 返回一个实现了 System.Collections.IEnumerator 的对象，该对象包含集合中的所有 TargetLine 对象（强类型枚举器）
        /// </summary>
        /// <returns>一个实现了 System.Collections.IEnumerator 的对象，该对象包含集合中的所有 TargetLine 对象（强类型枚举器）</returns>
        public IEnumerator<TargetLine> GetEnumerator()
        {
            return _targetLines.GetEnumerator();
        }

        #endregion

        #region IEnumerable 成员

        /// <summary>
        /// 返回一个实现了 System.Collections.IEnumerator 的对象，该对象包含集合中的所有 TargetLine 对象（弱类型枚举器）
        /// </summary>
        /// <returns>一个实现了 System.Collections.IEnumerator 的对象，该对象包含集合中的所有 TargetLine 对象（弱类型枚举器）</returns>
        IEnumerator IEnumerable.GetEnumerator()
        {
            return _targetLines.GetEnumerator();
        }

        #endregion
    }
}
